package neu.edu.cn.nuemall.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import neu.edu.cn.nuemall.dto.CartItemDTO;
import neu.edu.cn.nuemall.entity.CartItem;
import neu.edu.cn.nuemall.mapper.CartItemMapper;
import neu.edu.cn.nuemall.service.CartItemService;
import neu.edu.cn.nuemall.service.BooksService;
import neu.edu.cn.nuemall.service.UserinfoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.stream.Collectors;

@Service
public class CartItemServiceImpl implements CartItemService {

    @Autowired
    private CartItemMapper cartItemMapper;

    @Autowired
    private UserinfoService userinfoService;

    @Autowired
    private BooksService booksService;

    @Override
    public int addToCart(CartItem cartItem) {
        return cartItemMapper.insert(cartItem);
    }

    @Override
    public List<CartItemDTO> getCartItemList() {
        String userId=userinfoService.getCurrentUser();
        QueryWrapper<CartItem> queryWrapper=new QueryWrapper<CartItem>();
        queryWrapper.eq("user_id",userId);
        List<CartItem> cartItemList=cartItemMapper.selectList(queryWrapper);


        return cartItemList.stream().map(cartItem -> {
            CartItemDTO cartItemDTO = new CartItemDTO();
            cartItemDTO.setId(cartItem.getId());
            cartItemDTO.setCount(cartItem.getCount());
            cartItemDTO.setBooksSkuDTO(booksService.getBookSkuById(cartItem.getSkuId()));


            cartItemDTO.setBooks(booksService.getBooksById(cartItemDTO.getBooksSkuDTO().getBooksId()));
            return cartItemDTO;
        }).collect(Collectors.toList());
    }

    @Override
    public int deleteCart(String  cartItem) {
        return cartItemMapper.deleteById(cartItem);
    }

    @Override
    public CartItemDTO getCartItem(String cartItemId) {
        CartItem cartItem = cartItemMapper.selectById(cartItemId);
        CartItemDTO cartItemDTO = new CartItemDTO();
        cartItemDTO.setId(cartItem.getId());
        cartItemDTO.setCount(cartItem.getCount());
        cartItemDTO.setBooksSkuDTO(booksService.getBookSkuById(cartItem.getSkuId()));
        cartItemDTO.setBooks(booksService.getBooksBaseInfoById(cartItemDTO.getBooksSkuDTO().getBooksId()));
        return cartItemDTO;
    }
}
